/**
 * Sistema Agenda */
package br.empresa.sistema.dominio;

import java.io.Serializable;

/**
 * Classe base para entidades que possuem um id.
 * Sobrescreve corretamente os métodos hashCode() e equals().
 * 
 */
public abstract class Entidade<ID> implements Serializable {

	/**
	 * Serial code version
	 */
	private static final long serialVersionUID = 6788690439749066592L;

	public abstract ID getId();

	@Override
	public int hashCode() {
		return 31 + ((getId() == null) ? 0 : getId().hashCode());
	}

	@Override
	public boolean equals(Object obj) {
		return (this == obj)
				|| (obj instanceof Entidade<?> && (this.getId() != null && this.getId().equals(((Entidade<?>) obj).getId())) 
						|| (this.getId() == null && obj != null && ((Entidade<?>) obj).getId() == null));
	}
}